Les fonctions peuvent être appelées dans le champ Variables d'un bloc ou directement dans le texte de réponse en utilisant #{...} :

#{discord_add_role(message_from, '1465674567090704592')}

Les identifiants de serveur, salon, rôle et message Discord sont de longues valeurs numériques. Le moyen le plus simple de les copier est d'activer Paramètres → Avancé → Mode développeur. Ensuite, l'option Copier l'ID apparaîtra dans le menu contextuel de tout objet.

La connexion du bot est décrite dans l'article Comment créer un chatbot dans Discord.

Où obtenir l'ID du message

L'ID du message qui a déclenché le bloc est stocké dans la variable discord_message_id. Vous n'avez pas besoin de le récupérer séparément :

#{discord_delete_message(discord_message_id)}

Si vous avez besoin de données qui ne sont pas disponibles dans les variables prédéfinies, le webhook complet est disponible dans la variable discord_webhook. Elle est renseignée lorsqu'une valeur est attribuée à la variable save_webhook :

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "Ceci est une réponse au message")

Variables créées automatiquement

Ces variables sont renseignées automatiquement pour chaque événement et ne nécessitent aucune configuration supplémentaire.

Variable Description Exemple
guild_id ID du serveur 1465674567090704591
discord_event Type d'événement en un seul mot message
discord_message_id ID du message avec le préfixe mid mid1465674569095319625
message_from ID de l'auteur de l'événement avec le préfixe uid uid413984787162726410
from_username Nom d'utilisateur Discord de l'auteur 00rei
from_name Nom d'affichage de l'auteur dans le chat Rus
username Nom d'utilisateur pour les messages directs au bot 00rei
is_bot 1 si l'auteur de l'événement est un autre bot 0
nickname Surnom sur le serveur ; vide s'il n'est pas défini Moderator
roles Liste des ID des rôles de l'auteur ["1465674567090704592"]
is_admin 1 si l'utilisateur est un administrateur ou le propriétaire du serveur 1
reply_from ID de l'auteur du message auquel on répond uid493121376652230668
reply_from_username Nom d'utilisateur de l'auteur auquel on répond _deikin
reply_from_name Nom d'affichage de l'auteur auquel on répond Rus
reply_to_bot 1 si la réponse est adressée au bot 0
reply_message_id ID du message auquel on répond mid1534837349219958804
reply_text Texte du message auquel on répond qui est de service aujourd'hui ?

Les préfixes uid, cid et mid font partie de la valeur. Passez ces variables aux fonctions telles quelles ; vous n'avez pas besoin de supprimer les préfixes.

from_name vs. from_username

from_name contient le nom qui doit être utilisé pour s'adresser à l'utilisateur dans le chat :

  1. Surnom du serveur, s'il est défini.
  2. Nom d'affichage du compte.
  3. Nom d'utilisateur.

C'est la variable recommandée à utiliser dans les salutations car from_username peut ressembler à _deikin ou 00rei.

Les variables reply_* ne sont renseignées que lorsque le message entrant est une réponse à un autre message. Pour les messages normaux, elles sont toutes effacées.

Par conséquent, la condition suivante distingue de manière fiable une réponse d'un message normal :

#{reply_from != ''}

Les variables nickname, roles et is_admin se réfèrent à l'auteur de l'événement actuel.

Discord ne fournit pas ces données pour les événements de réaction, donc les vérifications d'administrateur doivent être effectuées sur un événement de message ou de commande slash.

Le texte du message entrant est stocké dans la variable standard question, comme dans les autres canaux.


Événements

En plus des messages normaux, des événements de service sont également envoyés dans l'entonnoir.

Leur texte est stocké dans la variable question, vous pouvez donc les traiter en utilisant des conditions de texte normales.

discord_event Texte dans question Quand cela se produit
message Texte du message Un membre envoie un message
message_edit Texte du message mis à jour Un message est modifié
interaction /warn @user spam Une commande slash est utilisée ou un bouton est cliqué
reaction_add new_like ❤️ uid413984787162726410 Une réaction est ajoutée
reaction_remove reaction_remove ❤️ uid413984787162726410 Une réaction est supprimée
message_delete message_delete mid1465674569095319625 Un message est supprimé
messages_delete_bulk messages_delete_bulk 12 Plusieurs messages sont supprimés
member_join member_join uid413984787162726410 Un membre rejoint le serveur
member_leave member_leave uid413984787162726410 Un membre quitte le serveur
member_update member_update uid413984787162726410 Le surnom ou les rôles d'un membre changent
member_ban member_ban uid413984787162726410 Un membre est banni
member_unban member_unban uid413984787162726410 Un membre est débanni

Pour une réaction personnalisée, l'ID de l'emoji personnalisé est utilisé à la place de l'emoji lui-même :

new_like beer:1479419477396291696 uid413984787162726410

Voir la section Réactions pour plus de détails.

Si un bloc doit se déclencher uniquement pour les messages normaux envoyés par les membres, ajoutez la condition suivante :

discord_event == 'message'

Cela filtre tous les événements de service en une seule fois.

Vérifier uniquement le texte de l'événement n'est pas fiable car un membre pourrait envoyer manuellement un message tel que member_join.

Important : member_update est déclenché par toute mise à jour d'un membre, y compris un rôle attribué par le bot lui-même. Un bloc qui réagit à member_update et attribue un rôle peut créer une boucle, donc ces conditions doivent toujours être restreintes de manière appropriée.


Messages

Fonction Description
discord_send_message(channel_id, text) Envoyer un message dans n'importe quel salon
discord_send_dm(user_id, text) Envoyer un message direct à un membre
discord_reply_to_message(message_id, text) Répondre à un message
discord_edit_message(message_id, text) Modifier un message envoyé par le bot
discord_delete_message(message_id) Supprimer un message
discord_bulk_delete_messages(channel_id, message_ids) Supprimer plusieurs messages à la fois
discord_get_message(channel_id, message_id) Récupérer un message
discord_pin_message(message_id) Épingler un message
discord_unpin_message(message_id) Désépingler un message

Limitations de Discord : Il n'y a pas de limite de temps pour modifier ou supprimer vos propres messages. La suppression en masse ne fonctionne que pour les messages de moins de 14 jours, et vous pouvez supprimer entre 2 et 100 messages à la fois.


Réactions

Fonction Description
discord_send_reaction(message_id, reaction) Ajouter une réaction
discord_delete_reaction(message_id, reaction, user_id) Supprimer une réaction. Si user_id est omis, la réaction du bot est supprimée

Le paramètre reaction accepte soit un emoji standard, comme ❤️, soit l'ID d'un emoji personnalisé du serveur.

Où obtenir un ID de réaction personnalisée

Ajoutez la réaction personnalisée souhaitée à n'importe quel message dans le salon.

Un rappel comme celui-ci apparaîtra dans le chat :

new_like beer:1479419477396291696 uid413984787162726410

Ici :

beer:1479419477396291696

est l'ID de la réaction.

Vous pouvez le copier et l'utiliser dans les fonctions de réaction :

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

Les emojis standard apparaissent dans les rappels tels quels :

new_like ❤️ uid413984787162726410

uid413984787162726410 est l'ID du membre qui a ajouté la réaction.


Modération

Fonction Description
discord_timeout_member(user_id, seconds) Mettre un membre en timeout pour le nombre de secondes spécifié, jusqu'à 28 jours
discord_remove_timeout(user_id) Supprimer un timeout de manière anticipée
discord_kick_member(user_id) Expulser un membre du serveur ; il peut revenir en utilisant une invitation
discord_ban_member(user_id, delete_message_seconds) Bannir un membre ; le deuxième argument spécifie combien de secondes d'historique de messages supprimer, jusqu'à 7 jours
discord_unban_member(user_id) Débannir un membre

Discord ne permet pas au bot de modérer un membre dont le rôle est supérieur au rôle du bot. Le propriétaire du serveur ne peut pas non plus être modéré.


Rôles et membres

Fonction Description
discord_add_role(user_id, role_id) Attribuer un rôle
discord_remove_role(user_id, role_id) Supprimer un rôle
discord_get_roles() Obtenir les rôles du serveur et leurs ID
discord_get_member(user_id) Obtenir les données d'un membre, y compris le surnom, les rôles et la date d'arrivée
discord_set_nickname(user_id, nickname) Changer le surnom d'un membre sur le serveur

Le rôle du bot doit être supérieur au rôle qu'il attribue.

Le rôle @everyone et les rôles gérés par les intégrations, y compris les rôles appartenant à d'autres bots, ne peuvent pas être attribués.


Salons et tickets

Fonction Description
discord_create_channel(name, type, parent_id, permission_overwrites) Créer un salon
discord_delete_channel(channel_id) Supprimer un salon
discord_set_channel_permission(channel_id, target_id, allow, deny, type) Autoriser ou refuser les permissions d'un salon
discord_create_invite(channel_id, max_age, max_uses) Créer un lien d'invitation
discord_get_invites() Obtenir les liens d'invitation du serveur

Pour discord_create_channel, le type par défaut est :

Valeur Type de salon
0 Salon textuel
2 Salon vocal
4 Catégorie

Vous pouvez passer un ID de catégorie dans parent_id pour créer le salon à l'intérieur de cette catégorie.

Pour discord_set_channel_permission, le dernier argument spécifie qui reçoit les permissions :

Valeur Cible
1 Membre
0 Rôle

Les paramètres allow et deny acceptent les valeurs suivantes :

Valeur Permission
1024 Voir le salon
2048 Envoyer des messages
3072 Voir le salon et envoyer des messages
65536 Lire l'historique des messages

Pour discord_create_invite, la durée de vie de l'invitation est spécifiée en secondes.

Par exemple :

86400

signifie 24 heures.

Une valeur max_uses de 0 signifie utilisations illimitées.


Commandes slash

Fonction Description
discord_get_commands() Obtenir les commandes enregistrées sur le serveur
discord_set_commands(commands) Remplacer l'ensemble des commandes

discord_set_commands accepte une liste de commandes :

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "Afficher les règles du serveur"
  },
  {
    "name": "warn",
    "description": "Émettre un avertissement",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "Utilisateur",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "Raison",
        "required": false
      }
    ]
  }
]')}

Exigences de Discord

  • name doit contenir uniquement des caractères minuscules, sans espaces, et doit avoir une longueur comprise entre 1 et 32 caractères.
  • description est obligatoire et doit avoir une longueur comprise entre 1 et 100 caractères.
  • Les options obligatoires doivent apparaître avant les options facultatives.
  • Passer une liste vide supprime toutes les commandes du bot du serveur.

Types d'options

Type Description
3 Chaîne de caractères
4 Entier
5 Booléen
6 Membre
7 Salon
8 Rôle

Lorsqu'une commande est appelée, elle est envoyée à l'entonnoir sous forme de chaîne telle que :

/warn @user spam

En d'autres termes, le nom de la commande et les valeurs des options sont séparés par des espaces.

Vous pouvez la traiter en utilisant une condition de texte normale.

Une fonction séparée pour les boutons n'est pas nécessaire. Les boutons sont configurés dans un bloc de réponse standard, et un clic sur un bouton est reçu de la même manière qu'une commande slash : la valeur du bouton apparaît dans le texte.


Points et Classement

L'intégration Discord inclut un système d'appréciation intégré. Des points sont attribués à l'auteur du message cité.

Vous pouvez l'utiliser pour construire des niveaux, des rangs et des classements.

Fonction Description
discord_add_thanks_score(value) Ajouter des points à l'auteur du message cité
discord_add_thanks_score_for_answer(value) Ajouter des points au membre qui a répondu
discord_minus_thanks_score(value) Retirer des points
discord_get_score(user_id) Retourner les points d'un membre sous forme de nombre. Sans argument, utilise l'auteur de l'événement
discord_get_level(user_id, points_per_level) Obtenir le niveau d'un membre. Seuil par défaut : 100 points par niveau
discord_get_user_info(user_id) Obtenir les points, la position dans le classement et le nom sous forme d'un seul objet
discord_get_top(count, shift, humanize, delimiter) Obtenir le classement

Pour discord_get_top :

  • count — nombre de lignes à retourner ;
  • shift — nombre de lignes à sauter, utile pour la pagination ;
  • humanize=true — retourne un texte prêt à être affiché ;
  • delimiter — séparateur entre le nom du membre et les points.

Lors de la comparaison des points dans une condition de bloc, utilisez discord_get_score. Cette fonction retourne un nombre, donc les comparaisons numériques fonctionnent comme prévu.


Exemples

Accueillir un Nouveau Membre par Message Direct

Condition de bloc :

member_join

Dans le champ Variables :

discord_send_dm(
    message_from,
    'Bonjour, #{from_name}! Consultez les règles épinglées.'
)

Supprimer un Message Contenant un Mot Interdit et Mettre le Membre en Temps Mort pendant 24 Heures

Condition de bloc : une liste de mots interdits.

Condition supplémentaire :

is_admin != 1

Fonctions :

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

Attribuer un Rôle pour une Réaction à un Message Spécifique

Condition de bloc :

new_like 🍕

Condition supplémentaire :

contains(discord_message_id, '1534927170965602324')

Fonction :

discord_add_role(
    message_from,
    '1465674567090704592'
)

Créer un Canal de Ticket Privé à partir d'un Bouton

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'Décrivez votre problème en un seul message.'
)

La première ligne de permission cache le canal à tout le monde (guild_id représente ici le rôle @everyone).

La deuxième ligne rend le canal accessible au membre qui a créé le ticket.


Attribuer des Points pour les Remerciements et Assigner un Rôle Basé sur le Niveau

Condition de bloc :

thanks;thx;thank you

Condition supplémentaire :

reply_from != '' and reply_from != message_from and reply_to_bot != 1

Fonctions :

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

La condition :

reply_from != message_from

empêche les membres de s'attribuer des points à eux-mêmes.

La condition :

reply_to_bot != 1

empêche l'attribution de points au bot.


Afficher Vos Points avec une Commande

Condition de bloc :

/xp

Dans le champ Variables :

points = discord_get_score()

lvl = discord_get_level()

Texte de réponse :

#{from_name}, vous avez #{points} XP · Niveau #{lvl}

Afficher le Classement avec une Commande

Condition de bloc :

/top

Texte de réponse :

🏆 Classement XP :

#{discord_get_top(10, 0, true, ' — ')}